home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / moni / systemviewer.lha / SysInfoWindow.c < prev    next >
Text File  |  2000-09-19  |  12KB  |  400 lines

  1. /****h *AmigaTalk/WindowInfo.c ****************************************
  2. **
  3. ** NAME
  4. **    SysInfoWindow.c
  5. **
  6. ** FUNCTIONAL INTERFACE:
  7. **
  8. **    PUBLIC void WriteText( char *string, int xpos, int ypos, int color );
  9. **
  10. **    PUBLIC BOOL CheckBit( int flags, int bit );
  11. **
  12. **    PUBLIC int HandleWindowInfo( void *structptr, int whichdisplay );
  13. **
  14. ***********************************************************************
  15. */
  16.  
  17.  
  18. PRIVATE struct Window *IWnd = NULL;
  19.  
  20. PRIVATE UWORD ILeft   = 0;
  21. PRIVATE UWORD ITop    = 32;
  22. PRIVATE UWORD IWidth  = 640;
  23. PRIVATE UWORD IHeight = MAX_HEIGHT;
  24.  
  25. PRIVATE UBYTE *IWTitle = "System Screens & Windows Full Info:";
  26.  
  27.  
  28. // -----------------------------------------------------------------
  29.  
  30. PUBLIC void WriteText( char *string, int xpos, int ypos, int color ) 
  31. {
  32.    struct RastPort  *rp = IWnd->RPort;
  33.    struct IntuiText  outtxt;
  34.  
  35.    outtxt.FrontPen  = color;
  36.    outtxt.BackPen   = 0;
  37.    outtxt.DrawMode  = JAM1;
  38.    outtxt.LeftEdge  = 0;
  39.    outtxt.TopEdge   = 0;
  40.    outtxt.ITextFont = Font;
  41.    outtxt.NextText  = NULL;
  42.    outtxt.IText     = (UBYTE *) string;
  43.  
  44.    PrintIText( rp, &outtxt, xpos, ypos );
  45.  
  46.    return;
  47. }
  48.  
  49. PUBLIC BOOL CheckBit( int flags, int bit )
  50. {
  51.    if ((flags & bit) == bit)
  52.       return( TRUE );
  53.    else
  54.       return( FALSE );
  55. }
  56.  
  57.  
  58. #define XPOS  6
  59.  
  60. PUBLIC UWORD StrYPos[32] = { 0, };
  61.  
  62. PRIVATE char bf[82], *itxt  = &bf[0];
  63. PRIVATE char tx[82], *title = &tx[0];
  64.  
  65. PRIVATE void DisplayStructure( void *ptr, int struct_type )
  66. {
  67.    IMPORT void WriteTask( void *ptr );
  68.    
  69.    struct Screen *s = NULL;
  70.    struct Window *w = NULL;
  71.    struct Task   *t = NULL;
  72.   
  73.    int            bgad, sgad, pgad, m, mi;
  74.   
  75.    bgad = sgad = pgad = m = mi = 0;
  76.    
  77.    switch (struct_type)
  78.       {
  79.       case 0: // Screen data:
  80.          s = (struct Screen *) ptr;
  81.  
  82.          sprintf( title, "SCREEN: (%08LX) %s", s, s->Title );
  83.          SetWindowTitles( IWnd, title, (UBYTE *) -1 );
  84.  
  85.          sprintf( itxt, "DefaultTitle: %s", s->DefaultTitle );
  86.          WriteText( itxt, XPOS, StrYPos[0], 2 ); 
  87.  
  88.          sprintf( itxt, "Left     : %3u Top       : %3u Width: %4u Height: %4u", 
  89.                   s->LeftEdge, s->TopEdge, s->Width, s->Height 
  90.                 );
  91.          WriteText( itxt, XPOS, StrYPos[1], 1 ); 
  92.  
  93.          sprintf( itxt, "WBorLeft : %3u WBorTop   : %3u", 
  94.                   s->WBorLeft, s->WBorTop
  95.                 );
  96.          WriteText( itxt, XPOS, StrYPos[2], 1 ); 
  97.  
  98.          sprintf( itxt, "WBorRight: %3u WBorBottom: %3u", 
  99.                   s->WBorRight, s->WBorBottom
  100.                 );
  101.          WriteText( itxt, XPOS, StrYPos[3], 1 ); 
  102.  
  103.          sprintf( itxt, "DetailPen: %3u BlockPen  : %3u", 
  104.                   s->DetailPen, s->BlockPen
  105.                 );
  106.          WriteText( itxt, XPOS, StrYPos[4], 1 ); 
  107.  
  108.          sprintf( itxt, "ViewPort  : %08LX RastPort   : %08LX", 
  109.                   s->ViewPort, s->RastPort
  110.                 );
  111.          WriteText( itxt, XPOS, StrYPos[5], 1 ); 
  112.  
  113.          sprintf( itxt, "BitMap    : %08LX LayerInfo  : %08LX", 
  114.                   s->BitMap, s->LayerInfo
  115.                 );
  116.          WriteText( itxt, XPOS, StrYPos[6], 1 ); 
  117.  
  118.          sprintf( itxt, "ExtData   : %08LX UserData   : %08LX", 
  119.                   s->ExtData, s->UserData
  120.                 );
  121.          WriteText( itxt, XPOS, StrYPos[7], 1 ); 
  122.  
  123.          sprintf( itxt, "NextScreen: %08LX FirstWindow: %08LX", 
  124.                   s->NextScreen, s->FirstWindow
  125.                 );
  126.          WriteText( itxt, XPOS, StrYPos[8], 2 ); 
  127.  
  128.          sprintf( itxt, "BarHeight  : %3u BarVBorder : %3u BarHBorder: %3u", 
  129.                   s->BarHeight, s->BarVBorder, s->BarHBorder
  130.                 );
  131.          WriteText( itxt, XPOS, StrYPos[9], 1 ); 
  132.  
  133.          sprintf( itxt, "MenuVBorder: %3u MenuHBorder: %3u", 
  134.                   s->MenuVBorder, s->MenuHBorder
  135.                 );
  136.          WriteText( itxt, XPOS, StrYPos[10], 1 ); 
  137.  
  138.          WriteText( "Flags:", XPOS, StrYPos[11], 3 );
  139.          
  140.          SetScreenFlagString( itxt, s );
  141.          WriteText( itxt, XPOS, StrYPos[12], 1 );
  142.  
  143.          WriteText( "ViewModes:", XPOS, StrYPos[13], 3 );
  144.  
  145.          SetScreenViewMode1( itxt, s );
  146.          WriteText( itxt, XPOS, StrYPos[14], 1 );
  147.  
  148.          SetScreenViewMode2( itxt, s );
  149.          WriteText( itxt, XPOS, StrYPos[15], 1 );
  150.  
  151.          WriteText( "Press Close Gadget when you're done!", 
  152.                     150, StrYPos[16], 2 
  153.                   ); 
  154.          break;
  155.  
  156.       case 1: // Window data:
  157.          w = (struct Window *) ptr;
  158.  
  159.          sprintf( title, "WINDOW: (%08LX) %s", w, w->Title );
  160.          SetWindowTitles( IWnd, title, (UBYTE *) -1 );
  161.  
  162.          sprintf( itxt, "WScreen: %08LX -> %s", 
  163.                   w->WScreen, w->WScreen->Title 
  164.                 );
  165.          WriteText( itxt, XPOS, StrYPos[0], 2 ); 
  166.  
  167.          sprintf( itxt, "Left    : %3u Top      : %3u Width    : %5u Height   : %5u",
  168.                   w->LeftEdge, w->TopEdge, w->Width, w->Height 
  169.                 );
  170.          WriteText( itxt, XPOS, StrYPos[1], 1 ); 
  171.  
  172.          sprintf( itxt, "MinWidth: %3u MinHeight: %3u MaxWidth : %5u MaxHeight: %5u",
  173.                   w->MinWidth, w->MinHeight, w->MaxWidth, w->MaxHeight 
  174.                 );
  175.          WriteText( itxt, XPOS, StrYPos[2], 1 ); 
  176.  
  177.          sprintf( itxt, "BdrLeft : %3u BdrTop   : %3u BdrRight : %5u BdrBottom: %5u",
  178.                   w->BorderLeft, w->BorderTop, 
  179.                   w->BorderRight, w->BorderBottom
  180.                 );
  181.          WriteText( itxt, XPOS, StrYPos[3], 1 ); 
  182.  
  183.          sprintf( itxt, "XOffset : %3u YOffset  : %3u DetailPen: %5u BlockPen : %5u",
  184.                   w->XOffset, w->YOffset, w->DetailPen, w->BlockPen
  185.                 );
  186.          WriteText( itxt, XPOS, StrYPos[4], 1 ); 
  187.  
  188.          sprintf( itxt, "CheckMark: %08LX ExtData: %08LX UserData: %08LX",
  189.                   w->CheckMark, w->ExtData, w->UserData
  190.                 );
  191.          WriteText( itxt, XPOS, StrYPos[5], 2 ); 
  192.  
  193.          CountGadgets( w, &bgad, &sgad, &pgad );
  194.  
  195.          sprintf( itxt, "BoolGadgets: %2u StrGadgets: %4u PropGadgets: %2u",
  196.                   bgad, sgad, pgad
  197.                 );
  198.          WriteText( itxt, XPOS, StrYPos[6], 1 ); 
  199.  
  200.          CountMenus( w, &m, &mi );
  201.  
  202.          sprintf( itxt, "Menus      : %2u MenuItems : %4u", m, mi );
  203.          WriteText( itxt, XPOS, StrYPos[7], 1 ); 
  204.  
  205.          t = (struct Task *) w->UserPort->mp_SigTask;
  206.  
  207.          sprintf( itxt, "UserPort  : %08LX -> mp_SigTask: %08LX, %-30.30s",
  208.                   w->UserPort, w->UserPort->mp_SigTask,
  209.                   (t == NULL ? " " : t->tc_Node.ln_Name)
  210.                 );
  211.          WriteText( itxt, XPOS, StrYPos[8], 2 ); 
  212.  
  213.          t = (struct Task *) w->WindowPort->mp_SigTask;
  214.          
  215.          sprintf( itxt, "WindowPort: %08LX -> mp_SigTask: %08LX, %-30.30s",
  216.                   w->WindowPort, w->WindowPort->mp_SigTask,
  217.                   (t == NULL ? " " : t->tc_Node.ln_Name) 
  218.                 );
  219.          WriteText( itxt, XPOS, StrYPos[9], 2 ); 
  220.  
  221.          sprintf( itxt, "PtrHeight: %3u PtrWidth: %2u Pointer: %08LX",
  222.                   w->PtrHeight, w->PtrWidth, w->Pointer
  223.                 );
  224.          WriteText( itxt, XPOS, StrYPos[10], 1 ); 
  225.  
  226.          sprintf( itxt, "ReqCount : %3u NextWindow: %08LX",
  227.                   w->ReqCount, w->NextWindow
  228.                 );
  229.          WriteText( itxt, XPOS, StrYPos[11], 1 ); 
  230.  
  231.          WriteText( "Flags:", XPOS, StrYPos[12], 3 );
  232.  
  233.          SetWindowFlags1( w, itxt );
  234.          WriteText( itxt, XPOS, StrYPos[13], 1 ); 
  235.  
  236.          SetWindowFlags2( w, itxt );
  237.          WriteText( itxt, XPOS, StrYPos[14], 1 ); 
  238.  
  239.          SetWindowFlags3( w, itxt );
  240.          WriteText( itxt, XPOS, StrYPos[15], 1 ); 
  241.  
  242.          SetWindowFlags4( w, itxt );
  243.          WriteText( itxt, XPOS, StrYPos[16], 1 ); 
  244.  
  245.          WriteText( "IDCMPFlags:", XPOS, StrYPos[17], 3 );
  246.  
  247.          SetIDCMPFlags1( w, itxt );
  248.          WriteText( itxt, XPOS, StrYPos[18], 1 ); 
  249.  
  250.          SetIDCMPFlags2( w, itxt );
  251.          WriteText( itxt, XPOS, StrYPos[19], 1 ); 
  252.  
  253.          SetIDCMPFlags3( w, itxt );
  254.          WriteText( itxt, XPOS, StrYPos[20], 1 ); 
  255.  
  256.          SetIDCMPFlags4( w, itxt );
  257.          WriteText( itxt, XPOS, StrYPos[21], 1 ); 
  258.  
  259.          SetIDCMPFlags5( w, itxt );
  260.          WriteText( itxt, XPOS, StrYPos[22], 1 ); 
  261.  
  262.          SetIDCMPFlags6( w, itxt );
  263.          WriteText( itxt, XPOS, StrYPos[23], 1 ); 
  264.  
  265.          SetIDCMPFlags7( w, itxt );
  266.          WriteText( itxt, XPOS, StrYPos[24], 1 ); 
  267.  
  268.          WriteText( "Press Close Gadget when you're done!", 
  269.                     150, StrYPos[25], 2 
  270.                   ); 
  271.          break;
  272.       
  273.       case 2: // Task structure:
  274.          WriteTask( ptr );
  275.          break;
  276.  
  277.       case 3: // Process structure:
  278.          WriteTask( ptr );
  279.          break;
  280.       }
  281.  
  282.    return;
  283. }
  284.  
  285. PRIVATE int OpenIWindow( int numlines )
  286. {
  287.    UWORD wleft = ILeft, wtop = ITop, ww, wh;
  288.    int   i;
  289.    
  290.    ComputeFont( Scr, Font, &CFont, IWidth, IHeight );
  291.  
  292.    IHeight = (numlines + 1) * (CFont.FontY + 3) + 2;
  293.  
  294.    if (IHeight > MAX_HEIGHT)
  295.       IHeight = MAX_HEIGHT;
  296.  
  297.    for (i = 0; i < 32; i++)
  298.       StrYPos[i] = 16 + i * (CFont.FontY + 3);
  299.          
  300.    ww = ComputeX( CFont.FontX, IWidth  );
  301.    wh = ComputeY( CFont.FontY, IHeight );
  302.  
  303.    if ((wleft + ww + CFont.OffX + Scr->WBorRight) > Scr->Width) 
  304.       wleft = Scr->Width - ww;
  305.  
  306.    if ((wtop + wh + CFont.OffY + Scr->WBorBottom) > Scr->Height) 
  307.       wtop = Scr->Height - wh;
  308.  
  309.    if ( !(IWnd = OpenWindowTags( NULL,
  310.  
  311.                    WA_Left,        wleft,
  312.                    WA_Top,         wtop,
  313.                    WA_Width,       ww + CFont.OffX + Scr->WBorRight,
  314.                    WA_Height,      wh + CFont.OffY + Scr->WBorBottom,
  315.                    WA_IDCMP,       BUTTONIDCMP | IDCMP_GADGETUP
  316.                      | IDCMP_REFRESHWINDOW | IDCMP_CLOSEWINDOW,
  317.  
  318.                    WA_Flags,       WFLG_SMART_REFRESH | WFLG_CLOSEGADGET 
  319.                      | WFLG_ACTIVATE | WFLG_RMBTRAP,
  320.  
  321.                    WA_Gadgets,     NULL,
  322.                    WA_Title,       IWTitle,
  323.                    WA_ScreenTitle, ScrTitle,
  324.                    TAG_DONE ))
  325.       )
  326.       return( -4 );
  327.  
  328.    return( 0 );
  329. }
  330.  
  331. PRIVATE int HandleInfoIDCMP( void )
  332. {
  333.    struct IntuiMessage    *m;
  334.    BOOL            running = TRUE;
  335.  
  336.    while (running == TRUE)
  337.       {
  338.       if ((m = (struct IntuiMessag *) GetMsg( IWnd->UserPort )) == NULL)
  339.          {
  340.          (void) Wait( 1L << IWnd->UserPort->mp_SigBit );
  341.          continue;
  342.          }
  343.  
  344.       CopyMem( (char *) m, (char *) &IMsg, 
  345.                (long) sizeof( struct IntuiMessage )
  346.              );
  347.  
  348.       ReplyMsg( (struct Message *) m );
  349.  
  350.       switch (IMsg.Class) 
  351.          {
  352.         case IDCMP_CLOSEWINDOW:
  353.            running = ICloseWindow();
  354.             break;
  355.          }
  356.       }
  357.  
  358.    return( running );
  359. }
  360.  
  361. PUBLIC int HandleWindowInfo( void *structptr, int whichdisplay )
  362. {
  363.    int rval = 0;
  364.    
  365.    switch (whichdisplay)
  366.       {
  367.       case 0: // Screen data:
  368.          rval = OpenIWindow( 16 );
  369.          break;
  370.  
  371.       case 1: // Window data:
  372.          rval = OpenIWindow( 25 );
  373.          break;
  374.  
  375.       case 2: // Task data:
  376.          rval = OpenIWindow( 13 );
  377.          break;
  378.  
  379.       case 3: // Process data:
  380.          rval = OpenIWindow( 28 );
  381.          break;
  382.       }
  383.    
  384.    if (rval < 0)
  385.       {
  386.       (void) Handle_Problem( "Couldn't open Information Window!", 
  387.                              "Allocation Problem:", NULL 
  388.                            );
  389.       return( -1 );
  390.       }
  391.  
  392.    DisplayStructure( structptr, whichdisplay );
  393.       
  394.    (void) HandleInfoIDCMP();
  395.  
  396.    return( 0 );
  397. }
  398.  
  399. /* --------------------- END of WindowInfo.c file! ----------------- */
  400.